#ifndef LIB_LIST_H_
#define LIB_LIST_H_

#include <vector>
#include <iostream>

struct ListNode {
    int value;
    ListNode* next;
};

struct DoubleListNode {
    int value;
    DoubleListNode* pre;
    DoubleListNode* next;
};

ListNode* CreateNode(int val);
DoubleListNode* CreateDoubleListNode(int val);

ListNode* ConnectNode(ListNode* pre, ListNode* next);
DoubleListNode* ConnectDoubleListNode(DoubleListNode* pre, DoubleListNode* next);

ListNode* CreateList(std::vector<int> node_values);
DoubleListNode* CreateDoubleList(std::vector<int> node_values);

void PrintList(ListNode* root);
void PrintDoubleList(DoubleListNode* root);

void DeleteList(ListNode* root);
void DeleteDoubleList(DoubleListNode* root);

#endif
